iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
自我挑戰組

從前端角度看30天學Python系列 第 23

【Day 23】Python 套件管理

  • 分享至 

  • xImage
  •  
  • 確認 pip 版本
  • 透過 pip 安裝套件
  • 解除安裝套件
  • 列出已安裝套件
  • 顯示套件資訊
  • PIP Freeze
  • 讀取URL
  • 創造一個套件

這篇文章是閱讀Asabeneh的30 Days Of Python: Day 20 - PIP後的學習筆記與心得。

就像前端有 npm,python 使用 pip (preferred installer program) 來安裝套件 (packages) —可以讓我們安裝並應用的模組。

從 Python 3.4 開始,pip 被預設包含在 Python 二進制安裝程式中。
-- 安裝 Python 模組 | Python Docs

確認 pip 版本

要確認 pip 是否有安裝,也可以這樣做:

pip --version

透過 pip 安裝套件

這邊會安裝 numpy —社群中相當熱門,用來做機器學習及資料科學的套件;原文章在 Day 24 會使用到。它的特色有:

  • N維度的陣列物件
  • broadcasting functions (還不太確定是什麼,看解釋是用來描述演算法中 NumPy 陣列處理的術語)。
  • 整合 C/C++和 Fortran 程式碼的工具。
  • 線性代數、傅立葉轉換,以及隨機數的處理能力。

安裝:

pip install numpy

使用小範例:

import numpy

numpy.version.version

lst = [1, 2, 3, 4, 5]

np_arr = numpy.array(lst)  

print(np_arr * 2) # [ 2  4  6  8 10]
print(np_arr + 2) # [3 4 5 6 7]
print(np_arr) # [1 2 3 4 5]

再安裝另一個套件試試,pandas —提供高效易用的資料結構及資料分析工具:

安裝:

pip install pandas

原文中 Day 25 會提到關於這個套件的使用。


額外被提到的套件:webbrowser

import webbrowser

url_lists = [
    'http://www.python.org',
    'https://www.google.com',
]

for url in url_lists:
    webbrowser.open_new_tab(url)

解除安裝套件

就像 npmpip 要解除套件安裝的話,可以用這個指令:

pip uninstall <packagename>

列出已安裝套件

還是像 npmpip 要列出現在已經安裝的套件列表可以用:

pip list

顯示套件資訊

這個指令可以看到這個套件的相關資訊:

pip show <packagename>
pip show numpy
Name: numpy
Version: 1.23.3
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email:
License: BSD
Location: c:\users
Requires:
Required-by:

加上 --verbose 會看到更多資訊:

pip show --verbose numpy
Name: numpy
Version: 1.23.3
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email:
License: BSD
Location: c:\users
Requires:
Required-by:
Metadata-Version: 2.1
Installer: pip
Classifiers:
  Development Status :: 5 - Production/Stable
  Intended Audience :: Science/Research
  Intended Audience :: Developers
  License :: OSI Approved :: BSD License
  Programming Language :: C
  Programming Language :: Python
  Programming Language :: Python :: 3
  Programming Language :: Python :: 3.8
  Programming Language :: Python :: 3.9
  Programming Language :: Python :: 3.10
  Programming Language :: Python :: 3.11
  Programming Language :: Python :: 3 :: Only
  Programming Language :: Python :: Implementation :: CPython
  Topic :: Software Development
  Topic :: Scientific/Engineering
  Typing :: Typed
  Operating System :: Microsoft :: Windows
  Operating System :: POSIX
  Operating System :: Unix
  Operating System :: MacOS
Entry-points:
  [array_api]
  numpy = numpy.array_api

  [console_scripts]
  f2py = numpy.f2py.f2py2e:main

  [pyinstaller40]
  hook-dirs = numpy:_pyinstaller_hooks_dir

Project-URLs:
  Bug Tracker, https://github.com/numpy/numpy/issues        
  Documentation, https://numpy.org/doc/1.23
  Source Code, https://github.com/numpy/numpy

PIP Freeze

pip freeze

執行這個指令會輸出,當前專案使用的套件的版本,就像 npmpackage.json 做的,但Python中要自己創建一個 requirements.txt 檔案來達成:

requirements 只是慣用名稱

pip freeze > requirements.txt

然後拿到專案的人可以用下方指令安裝列表中的套件:

pip install -r requirements.txt

讀取 URL

Python 可以安裝 requests 這個模組,來透過網址請求資料,也就是跟瀏覽器做的事一樣,是網路爬蟲的重要工具之一:

pip install requests

首先透過 requests.get() 向網站取得回應,這邊我使用 SWAPI (星際大戰的資料) 來做例子:

  • status_code:請求的回應代碼,比如200, 404等。
  • headers:請求的表頭,像是 Content-Type、Allow。
import requests

url = "https://swapi.dev/api/people/1"
response = requests.get(url)

print(response) # <Response [200]>
print(response.status_code) # 200
print(response.headers)
# {'Server': 'nginx/1.16.1', 'Date': 'Fri, 07 Oct 2022 05:36:04 GMT', 'Content-Type': 'application/json', ...

如果回應是給txt、html,xml和其他檔案格式,可以使用text

  • text:網站的文字資訊,就是HTML的部分。
print(response.text)
# {"name":"Luke Skywalker","height":"172","mass":"77","hair_color":"blond", ...

如果回應是給JSON字串:

  • json:可以把回應收到JSON字串轉為物件。
character = response.json();
print(character["name"]) # Luke Skywalker

創造一個套件

若要讓Python視資料夾為套件,需要在裡面創建一個 __init__.py 檔案,並把 module 檔案放進裡面,資料夾結構會像這樣:

- mypackage
    |-- draw.py
    |-- greetings.py
    |__ __init__.py

draw.pygreetings.py 裡面分別是:

# @filename: draw.py
def make_stairs(floors: int):
    for i in range(floors):
        spaces = floors - (i + 1)
        print(" " * spaces + "#" * (i + 1))
# @filename: greetings.py
def greet_person():
    firstname = input("What's your first name? ")
    lastname = input("And what's your last name? ")
    print(f"Greetings {firstname} {lastname}")

然後就可以在其他檔案中去引入 mypackage 這個資料夾:

# @filename: main.py
from mypackage import greetings, draw

draw.make_stairs(3)

greetings.greet_person()

執行結果:

  #
 ##
###
What's your first name? John
And what's your last name? Doe
Greetings! John Doe.

上一篇
【Day 22】檔案類型
下一篇
【Day 24】類別與物件
系列文
從前端角度看30天學Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言